Method and system for communicating between a remote printer and a server

ABSTRACT

In order to enable downloading to a mobile printer data items from a server, a method comprising the steps of establishing communication connection end points (“sockets”), communicating with the server, where the communication includes sending a request for authentication to the server, receiving an authentication response, requesting print data portions from the server, receiving the requested print data portions, and notifying the server after each print data portion has been printed. The method also includes the step of terminating their communication connection when a printing session ends or if an error occurs. The method constitutes a printer-server protocol.

CROSS REFERENCE TO RELATED APPLICATIONS

This application is a continuation of U.S. patent application Ser. No.15/265,098, filed Sep. 14, 2016, which is a continuation of U.S. patentapplication Ser. No. 14/137,688, filed Dec. 20, 2013, now U.S. Pat. No.9,448,750, issued Sep. 20, 2016, which is a continuation of U.S. patentapplication Ser. No. 13/087,089, filed Apr. 14, 2011, now U.S. Pat. No.8,645,500, issued Feb. 4, 2014, which is a continuation of U.S. patentapplication Ser. No. 12/105,710, filed Apr. 18, 2008, now U.S. Pat. No.7,958,205, issued Jun. 7, 2011, which is a continuation of U.S.application Ser. No. 10/191,606, filed Jul. 9, 2002, now U.S. Pat. No.7,383,321, issued Jun. 3, 2008, each of which is hereby incorporated byreference in its entirety. This application is also related to thefollowing commonly-owned patent applications, each of which is herebyincorporated by reference in its entirety:

U.S. application Ser. No. 09/870,538, filed May 30, 2001, entitled“Method and System for Generating a Permanent Record of a ServiceProvided to a Mobile Device,” now U.S. Pat. No. 7,747,699, issued Jun.29, 2010;

U.S. application Ser. No. 10/022,924, filed Dec. 18, 2001, entitled“Method and Apparatus for Printing Remote Images Using a Network-EnabledPrinter,” now U.S. Pat. No. 6,976,084, issued Dec. 13, 2005;

U.S. application Ser. No. 10/024,068, filed Dec. 18, 2001, entitled“Method and Apparatus for Printing Remote Images Using a Mobile Deviceand Printer,” now abandoned and replaced by continuation applicationSer. No. 11/150,948, filed Jun. 13, 2005, entitled “Method and Apparatusfor Providing Output From Remotely Located Digital Files Using a MobileDevice and Output Device,” now abandoned;

U.S. application Ser. No. 10/191,161, filed Jul. 9, 2002, entitled“Method and Apparatus for Providing Output from Remotely Located DigitalFiles Using a Remote Printer,” now abandoned; and

U.S. application Ser. No. 10/191,892, filed Jul. 9, 2002, entitled“System for Remotely Rendering Content for Output by a Printer,” nowabandoned.

TECHNICAL FIELD

The present invention relates to techniques for printing digital imagesand, more particularly, to techniques for communicating between a remoteprinter having communication capabilities and a server.

BACKGROUND

The Internet, and in particular the World Wide Web (the “Web”), isincreasingly being used to store and exchange information and to performcommercial transactions. Although the Web was originally only capable ofstoring and displaying textual information, the Web may now be used tostore, display, and exchange a wide variety of textual, graphical, andaudiovisual information such as digital images and full-motion video.

Digital photography, for example, is becoming increasingly popular,spurred in large part by the advent of low-cost, high-quality digitalcameras. An increasing number of web sites allow users to upload digitalphotographs and other digital images to the Web, whereby such images maysubsequently be viewed, shared, edited, and printed on conventionalprinters using computers connected to the Web using conventionalInternet connections.

To print a digital image from the Web, a user must typically use aconventional desktop or laptop computer to establish a Web connectionusing a conventional modem or other network connection device. The usermust then locate the digital image (such as a digital photograph) to beprinted or complete a transaction that produces an image (such as aticket) to be printed. The user must then typically download the locatedimage from the Web site to the computer. To print the image, the usermust typically issue a “print” command to the Web browser or othersoftware executing on the computer.

Such a process can be cumbersome for the user and may restrict the rangeof circumstances in which the user may print digital images from theWeb. For example, the conventional method described above involvesseveral discrete steps, each of which must be initiated by the user:locating the desired image, downloading the image to a host computer,and issuing a print command to print the image.

Locating the desired image may be difficult if the user does not know orremember the precise Web address of the image to be printed. Even if theuser does remember, for example the address of the home page of the Website on which the image is stored, it may be necessary for the user toperform several steps to navigate a Web browser to the precise image tobe downloaded.

If the image to be printed cannot be printed directly from the Web pageon which it is stored, it may be necessary for the user to download theimage to the host computer. This may require the user to perform severalsteps, such as selecting the image, providing a filename for the image,and selecting a location on a local storage device (such as a hard diskdrive) on which the image is to be stored.

Printing the image may also be problematic. For example, if the imagehas been downloaded to a local storage device, the user may have tolocate the image on the storage device and open the image file usingimaging software before issuing a print command. The print command mayfail for a variety of reasons, such as a faulty connection between thehost computer and the printer or the absence of an appropriate printerdriver on the host computer. After printing the image, the usertypically must manually delete the downloaded image file from the localstorage device.

In particular, it may be difficult and/or time consuming for a user toprint images that are generated as a result of a non-Web transaction.Consider, for example, a user who purchases a ticket (such as a concertticket or airline ticket) over the telephone. If such a transactiongenerates a ticket that is accessible over the Web for printing, theconventional system described above would require the user to connectthe host computer to the Web, locate the image of the ticket using a Webbrowser, and print the image. Such a process requires the user to engagein a significant amount of post-transaction activity and may beparticularly difficult for those users who have chosen to conduct thetransaction (e.g., purchase the ticket) over the telephone because theyare not familiar with using computers in general or the Web inparticular. Users who are unable to print the resulting ticket maybecome dissatisfied with the associated service and fail to becomerepeat customers.

It should therefore be apparent that the process of printing images fromthe Web using a conventional computer connected to a conventionalprinter can be a tedious, time-consuming, and error-prone process.

Furthermore, the requirement that the printer be connected to a hostcomputer has a variety of disadvantages. For example, a mobile computeruser who desires the ability to print images from a variety of locations(such as at home and at the office) must have access to a Web-connectedcomputer in each such location. Using the techniques described above,even a small mobile printer must be connected to a computer to printimages from the Web. As a result, a user who wishes to print such remoteimages may be required to travel with both a printer and a laptopcomputer, or may be limited to printing images from locations at which aWeb-connected desktop computer is available. The requirement that theprinter be connected to a computer therefore limits the mobility of theuser and limits the range of locations from which images may be remotelyprinted.

What is needed, therefore, are improved techniques for downloading andprinting digital images.

In concurrently filed application Ser. No. 10/191,161, entitled “Methodand Apparatus for Providing Output from Remotely Located Digital FilesUsing a Remote Printer”, techniques are disclosed for coupling a printerto a communications network (such as a Plain Old Telephone Servicenetwork or wireless voice or data networks), downloading printinginformation (such as a digital image) to the printer over thecommunications network, and using the printer to print output based onthe printing information. The printer includes a network communicationsdevice, such as a modem, that enables the printer to connect directly tothe communications network. The printing information may be downloadedto the printer in any of a variety of ways. For example, the printer mayestablish a connection to a printing server that serves the printinginformation. A connection between the printer and the printing servermay be established, for example, by using the printer to place atelephone call to the printing server over a Plain Old Telephone Service(POTS) network. The printer may then download the printing informationover the POTS network and print the image specified by the printinginformation.

Data communications over telephone and wireless connections can beunreliable. There is a need for a protocol for communicating between theprinter and the printing server that ensures reliable communication andallows the transmission of information that restart at the point ofinterruption if interrupted.

It is an object of this invention to provide one embodiment of aprotocol for communicating between the printer and the printing serverthat ensures reliable communication.

It is a further object of this invention to provide a protocol thatallows the printing of documents with multiple pages and provides errorchecking.

It is also an object of this invention to provide a protocol thatenables the communicating of the state of previous prints between theprinter and the server and to provide secure access to this information.

SUMMARY

The objects set forth above as well as further and other objects andadvantages of the present invention are achieved by the embodiments ofthe invention described hereinbelow.

In order to enable downloading to a mobile printer data items from aserver, a method comprising the steps of establishing communicationconnection end points (“sockets”), communicating with the server, wherethe communication includes sending a request for authentication to theserver, receiving an authentication response, requesting print dataportions from the server, receiving the requested print data portions,and notifying the server after each print data portion has beenvalidated and printed is disclosed. The method also includes the step ofterminating their communication connection when a printing session endsor if the time between commands received from the printer exceeds aconstant timeout period or if an error occurs. In the authenticationprocess, the server receives the characteristics of the mobile printerand the characteristics are compared to a database at the server therebyenabling the server to identify printing preferences. Knowledge of theprinter characteristics and the printing preferences enables thepreparing of documents to be printed at a specific mobile printer andthe processing the documents to achieve optimum quality prints. If theprinter is not registered (not found in the database), the remoteprinter will be registered automatically during authentication. Inaddition, as part of the authentication process, the printer transmitsinformation to the server that allows the determining of printcompletion failures. Following this determination of print completionfailures, the server can provide the mobile printer with the previouslyattempted print data and the printer can re-attempt printing. In theprocess of requesting print data portions from the server, the printercan request a partial print data portion. Requesting and receivingpartial print data portions, renders the printer-server connectionrobust against noisy transmission and transmission interruption.Robustness against transmission errors is further enhanced by the use ofsecurity indicators. A security indicator is calculated at the serverfor each data portion and communicated to the remote printer along withthe data portion. At the printer, the security indicator is calculatedagain and compared to the one received from the server. The securityindicator can be a cyclic redundancy code (CRC), a digital signaturesuch as that calculated by means of the MD5 message digest algorithm orjust a known number (a so called Magic number) or a combination of thethese. (A Magic number is a known, fixed number that is used to verifythat the data stream is synchronized at the send/receive ends and thatthe data to follow is as expected.)

The above-described method constitutes a printer-server protocol and isimplemented in a computer readable code. The computer readable code isembodied in a computer usable memory. Both the server and the printerinclude computer usable memories in which the computer readable codethat implements the protocol is embodied.

The use of the printer server protocol of this invention obviates theneed for a printer driver and enables the operation of the printerwithout a companion computer. Thus, the remote printer withcommunication capabilities can be connected to a network, and connectedthrough the network to the server. The printer can be used anywhere, canbe connected to a wireless phone or to a telephone network (POTSnetwork) and data downloaded and printed.

To enable the remote operation of the printer (without a companioncomputer), complete two-way communication between the printer and theserver is needed. The invention disclosed herein enables completetwo-way communication between output devices and servers and supportsthe ability to continue transmission of data if the transmission waspreviously interrupted.

Although the printer is described herein as a device for printingimages, it should be appreciated that more generally the term “printer”is used herein to refer to any device for receiving input and producinghard or soft copy output. Such input/output may include not only staticimages but also an audiovisual stream (which may include an audiostream, a video stream, or any combination thereof). It should thereforebe appreciated that the term “image” (when referring, for example, tostored images and a printed image) may refer not only to a static image,but to any of the kinds of information that the printer may receive andoutput. The printer may, for example, be a CD drive (such as a CD-ROM,CD-R, or CD-RW drive), DVD player, or MP3 player that includes a networkcommunications device and performs the other functions of the printerthat are described herein.

For a better understanding of the present invention, together with otherand further objects thereof, reference is made to the accompanyingdrawings and detailed description and its scope will be pointed out inthe appended claims.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 is a graphical representation of a printer-server systemembodying this invention;

FIG. 2 is a flowchart of an embodiment of the method of this inventionas applied at the remote printer;

FIG. 3 is a flowchart of an embodiment of the method of this inventionat the remote printer depicting a more detailed representation of methodfor receiving subsequent print data portions;

FIG. 4 is a flowchart of an embodiment of the method of this inventionat the remote printer depicting a more detailed representation of methodfor receiving from the server an authentication response;

FIG. 5 is a flowchart of an embodiment of the method of this inventionat the remote printer depicting a more detailed representation of methodfor receiving print data portions from the server;

FIG. 6 is a flowchart of an embodiment of the method of this inventionat the remote printer depicting a more detailed representation of methodfor utilizing a security indicator;

FIG. 7 is a flowchart of an embodiment of the method of this inventionas applied at the server;

FIG. 8 is a flowchart of an embodiment of the method of this inventionas applied at the server depicting a more detailed representation ofmethod for sending to the remote printer an authentication; and,

FIG. 9 is a flowchart of an embodiment of the method of this invention sapplied at the server depicting a more detailed representation of methodfor sending print data portions to the remote printer.

FIG. 10 depicts a flowchart of an embodiment of a sequence of APIfunction calls to be made by the printer;

FIG. 11 depicts a flowchart of an embodiment of printer logic during theprinting of one or more copies of a print data portion; and

FIG. 12 depicts a flowchart of an embodiment of a sequence of responsesat the server to printer function calls.

DETAILED DESCRIPTION OF ILLUSTRATIVE EMBODIMENTS

Data received at server 10, as shown in FIG. 1, is provided to remoteprinter 30 via a network 20. Such a system is disclosed in the abovereferenced U.S. patent application Ser. No. 10/191,161, entitled “Methodand Apparatus for Providing Output from Remotely Located Digital FilesUsing a Remote Printer”. Once received at the output (or printing)server 10, the data is processed, rearranged and converted into a formsuitable for output. One embodiment of method of rearranging andconverting the data in the data structure and into a form suitable forprinting (output) is described in the above-referenced U.S. patentapplication Ser. No. 10/191,892. The processed, rearranged and convertedinformation is then provided to the mobile printer 30 (output device,herein after also referred to as “printer”) over the network 20 (wherethe network can be a POTS network or a wireless voice or data network).An embodiment of a protocol for communicating between printer 30 andserver 10 is disclosed herein.

A method that enables downloading, to the printer 30, data items fromthe server 10 is shown in FIG. 2. The printer 30 initiates a connectionto the server 10 over the network 20 (step 40, FIG. 2). The connectioncan be initiated via a telephone call or by other means to access asystem via a network such as those used in computer networks. Theprinter 30 then establishes an interprocess communication mechanism atone end of the interprocess communication channel (for example, “asocket”) comprising a connection end point and a network address, thenetwork address identifying the server 10 in the network 20 (step 50,FIG. 2). “Sockets” are the most common mechanism and method for twoprograms at different locations in a network to communicate. “Sockets”are supported in most operating systems, such as UNIX, Windows, MS-DOS,MacOS. (In non-technical terms, sockets are akin to telephoneconnections to allow one program or process to communicate withanother.) “Sockets” are established and used with a set of functionstermed the sockets application programming interface (API) which isprovided by the operating system. A typical socket API has the followingmajor functions: a function for creating a socket; a bind function forbinding a socket to an end point of a known protocol/port; a listenfunction for placing a socket bound to a known port in a passive mode;an accept function for accepting incoming connections from a passivesocket; a connect function for opening active connections to remoteendpoints; a read function for reading data from existing connections; awrite function for writing data to existing connections; and a functionfor closing existing connections. After the interprocess communicationmechanism (“socket”) is established, the printer 30 then communicateswith the server 10. The communication between printer 30 and server 10comprises authentication (steps 60 and 70, FIG. 2) and the request (step80, FIG. 2) and receipt (step 90, FIG. 2) of print data. After printingthe print data, the printer 30 sends a print notification to the server10 (step 100, FIG. 2). Upon completion of the printing session or if anerror occurs in transmission, the communication session terminates (step110, FIG. 2) by closing the socket and disconnecting the networkconnection.

It should be apparent that a printing session can involve printingmultiple documents. FIG. 3 provides a more detailed description of thesteps of requesting from the server 10 print data portions and inreceiving from the server 10 print data portions. Following a requestfor authentication (step 60, FIG. 2), the server 10 provides a response(step 70, FIG. 2) including status information, a specified number forthe data items to be printed, and a specified number for the print dataportions to be downloaded. The printer 30 then: (a) requests from theserver 10 one print data portion (step 120, FIG. 3); (b) receives aresponse from the server 10 including the one print data portion, aspecified number of copies to be printed of that one print data portion,and a transmission status for the data portion request (step 130, FIG.3); (c) terminates the communications connection if the transmissionstatus indicates a transmission failure (step 140, FIG. 3); (d) printsthe one print data portion, if the transmission status indicates atransmission success (step 150, FIG. 3); (e) sends a notification ofprint completion to the server upon completion of printing (step 150,FIG. 3); and, (f) terminates the communications connection if printcompletion was not successful (step 160, FIG. 3). In order to print aspecified number of copies of one print data portion, in step (g) steps(d) through (f) are repeated until the specified number of copies to beprinted of that one print data portion are printed, unless printcompletion is not successful for any copy (step 170, FIG. 3). In orderto download the specified number of print data portions to bedownloaded, steps (a) through (g) are repeated until the specifiednumber of print data portions to be down loaded has been downloaded(step 180, FIG. 3).

For simplicity, FIG. 3 indicates that all the copies of the lastdownloaded print data portion are to be printed before attempting todownload a new print data portion. However, this not required. If theprinter has sufficient CPU and memory resources, it can begindownloading the next print data portion while it is printing the currentone. It is only necessary to send notification of print completion foreach actual hard copy print made as soon as possible and keep track ofadditional variables that differentiate between the print data portionalready downloaded and the print data portion in process of beingdownloaded. In this case, sending notification of print completion mustbe delayed until the next print data portion has been received since theprinter API cannot return from sending a notification of printcompletion until it receives a response from the server and the nextprint data portion will still be in the input socket stream until thatcall completes.

Authentication (steps 60 and 70, FIG. 2) is described in more detail inFIG. 4. When the printer 30 send a request for authentication to theserver 10 (steps 60, FIG. 2), the printer 30 also sends to the server 10data identifying the characteristics of the printer (step 210, FIG. 4).When the printer 30 receives the response from the server (step 70, FIG.2), the printer 30 receives, from the server, status information, aspecified number for the data items to be printed and, a specifiednumber for the print data portions to be downloaded (step 220, FIG. 4).The status information is examined (step 230, FIG. 4) to determinesuccess or failure of authentication. If the printer determines that afailure occurred, the connection is terminated (step 110, FIG. 2). Ifstatus indicates a success, the printer 30 determines if the previouscommunication connection resulted in a notification of print completionindicating a print completion failure (step 240, FIG. 4). If theprevious communication connection resulted in a notification of printcompletion failure, the printer 30 attempts to notify the server 10 byperforming the following steps:

-   -   the printer 30 sends a notification of print completion to the        server (step 280, FIG. 4);    -   and, it receives from the server status information (step 280,        FIG. 4).

Requesting (step 80, FIG. 2) and receiving (step 90, FIG. 2) print datais described in more detail in FIG. 5. The printer 30 determinesidentifying data for the next document to be printed and the lastdocument printed, identifying data for the print data portion in thenext document to be printed and identifying data for an offset. (Theoffset allows the restart of transmission that has been interrupted. Ifthe document and the data portion that were being transmitted when theinterruption occurred can be identified and the location in the file atwhich the transmission was interrupted is known, the offset indicatesthe location in the file at which transmission should resume.) In replyto the print data portion (step 310, FIG. 5), the printer 30 thenrequests print data from the server 10 (step 320, FIG. 5) and receivesfrom the server 10 a transmission status (step 330, FIG. 5), as well asidentifying data for a document and identifying data for a print dataportion in that document. These identifying data are generated at theserver. Content to print is queued up on the server 10 in a database.The user of the printer 30 can set preferences as what content is to beprinted first such as “print oldest first”, “print newest first”, “printtickets first”. This method enables printing a multiple page document.Multipage documents will have one print data portion per page. On theserver, they will be grouped together in a single document databasetable record. Each document will consist of one or more document items.On the server, a document item record will hold the print data portionfor the page.

If the printer determines there was a failure, the connection isterminated (step 110, FIG. 2). If a saved status from a previouscommunication indicates a partial data sent status, the printer 30receives the remaining part of a partially downloaded data portion byreceiving from the server a specific print data portion having a givensize (step 350, FIG. 5), and increasing the offset by the given size ofthe specific print data portion (step 360, FIG. 5).

The print data portions downloaded from the server 10 can be compresseddata or not compressed data. If they are compressed as downloaded, theprint data portions must be uncompressed at the printer 30 beforeprinting. Compression schemes used can be lossless such as arithmeticcoding, Huffman coding or other forms of entropy coding, or lossy, suchas transform coding (DCT, wavelet, for example). Compression schemesused can be standard, such as JPEG, or can be tailored to theapplication.

Additional verification of correct transmission is obtained by means ofsecurity indicators that are transmitted along with the data. Referringto FIG. 6, a security indicator is received from the server 10 for eachof said print data portions, where each of the security indicators iscalculated from each of the print data portions (step 410, FIG. 6). Atthe printer 30 a printer calculated security indicator is calculated foreach of the print data portions (step 420, FIG. 6). For each print dataportion, the printer calculated security indicator is compared with thesecurity indicator provided by the server 10 (step 430, FIG. 6). If thecomparison of security indicators yields a difference, a status isgenerated indicating a transmission failure for the corresponding printdata portion (step 440, FIG. 6). The security indicator can be a cyclicredundancy code (CRC), a digital signature such as that calculated bymeans of the MD5 message digest algorithm or as a simple number known toboth printer 30 and server 10 (MAGIC numbers), or a combination of thetwo. (The MAGIC numbers can also be used to verify that the printer andthe server are synchronized.)

When a CRC or a digital signature such as that calculated by means ofthe MD5 message digest algorithm is used as a security indicator, andthe response from the server 10 initiates the transfer of a new printdata portion to the printer 30, if the header data returned iserror-free, then the CRC value or a digital signature such as thatcalculated by means of the MD5 message digest algorithm returned fromthe server 10 should be saved. (As used hereinafter, CRC refers to CRCor a digital signature such as that calculated by means of the MD5message digest algorithm.) This value represents the CRC of the entireprint data portion. If errors then occur in transmission of the printdata portion so that only partial data is received, this CRC is to besaved until the entire print data portion has been sent to the printer30. This may require more than one call to the server 10. After theentire print data portion is received, the CRC value of the print dataportion should be computed at the printer and compared to the saved CRC.If they differ, the print data portion must be discarded and the processrepeated from the beginning. If the print data portion is beingrequested with offset greater than zero, then the CRC returned from theserver only corresponds to the portion of the print data portion fromthe offset to the end of the print data portion.

A method for enabling the server 10 to provide data items to the printer30 is shown in FIG. 7. A process to control communications through acommunication connection endpoint to another communication connectionendpoint is established at the server 10 (step 510, FIG. 7), upon theother communication connection endpoint being established at the printer30 (step 500, FIG. 7). In an embodiment using “sockets”, a “socket” tothe server 10 is opened at the printer 30. The server 10 starts aprocess to control communications (a “socket” handler). After a uniqueprocess to control communications has been established, the server 10responds to requests from each connected printer 30 (step 520, FIG. 7).Upon receipt of an authentication request from the printer 30 (step 530,FIG. 7), the server 10 sends an authentication response, statusinformation, a specified number for the data items to be printed and, aspecified number for the print data portions to be downloaded to theprinter 30 (step 535, FIG. 7). Upon receipt of a request from theprinter 30 for an update on the specified numbers for the data items andthe print data portions (step 540, FIG. 7), the server 10 sends to theprinter 30 an updated specified number of data items to be printed andan updated specified number of print data portions to be downloaded(step 545, FIG. 7). Upon receipt of a request from the printer 30 forprint data portions to be downloaded (step 550, FIG. 7), the server 10sends print data portions to be printed (step 555, FIG. 7). The server10 receives from the printer 30 notification after each print dataportion has been printed (step 560, FIG. 7). The server 10 sends statusinformation to the printer 30 in response to receipt of notificationafter printing (step 565, FIG. 7). The server 10 terminates thecommunications connection when a printing session ends or even if anerror occurs (step 580, FIG. 7).

The authentication process at the server 10 (step 535, FIG. 7), inresponse to an authentication request received from the printer 30 (step530, FIG. 7) is described in more detail in FIG. 8. The server 10receives from the printer 30 data identifying the characteristics of theprinter (step 600, FIG. 8). The data identifying the characteristics ofthe printer includes the serial number, the model number and thefirmware number (revision, model) of the printer 30. The characteristicsof the printer are compared to data in a database in order to verifyregistration (step 610, FIG. 8). If the characteristics of the printer30 are found in the database, a specified number for the data items tobe printed, and a specified number for the print data portions to bedownloaded are sent to the printer 30 (step 630, FIG. 8). If thecharacteristics of the mobile printer are not found in the database, theprinter 30 is registered by performing a registration process comprisingthe steps of:

-   -   registering the characteristics of the mobile printer in the        database (step 640, FIG. 8),    -   determining if the registration was successful (step 650, FIG.        8),    -   sending to the mobile printer a specified number for the data        items to be printed, and a specified number for the print data        portions to be downloaded, if the registration was successful        (step 660, FIG. 8),    -   sending to the mobile printer an error status, if the        registration was not successful (step 670, FIG. 8).

The response to a request from the printer 30 for print data portions tobe downloaded (step 550, FIG. 7) is shown in more detail in FIG. 9. Theserver 10 receives identifying data for a next document to be printed,identifying data for a next print data portion to be printed,identifying data for a last document which was printed, and identifyingdata for a last print data portion which was printed (step 700, FIG. 9).Then, the server 10 determines if a request for print data portions isimmediately subsequent to a mobile printer registration (step 710, FIG.9). If the request for print data portions is immediately subsequent toa printer registration (step 710, FIG. 9), the server 10 sends to theprinter 30 one or more welcome print data portions (step 730, FIG. 9).If the next document to be printed is a welcome print document (step720, FIG. 9), the server 10 sends to the printer 30 one or more welcomeprint data portions (step 730, FIG. 9). The server 10, then, determinesif a specific data portion is requested by the printer (step 740, FIG.9). If a specific data portion was not requested by the printer 30, theserver 10 sends a next data portion in a print queue (step 750, FIG. 9).If a specific data portion was requested by the printer (step 760, FIG.9), performing the steps comprising of:

-   -   determining if a partial data portion is requested by the        printer (step 770, FIG. 9),    -   retrieving the partial data portion (step 780, FIG. 9), if a        partial data portion was requested by the printer,    -   if a partial data portion was not requested by the printer,        performing the steps comprising of:        -   retrieving the specific data portion (step 785, FIG. 9),        -   setting an offset, one of the item in the data for the            printer, equal to zero (step 790, FIG. 9).

Whether a partial data portion or an entire data portion is retrieved,the server 10 sends the partial data portion or the entire data portionto the printer 30 along with the identifying data for the document andidentifying data for the print data portion, the security indicator ofthe data and the offset (step 795, FIG. 9). At the server 10, a securityindicator is calculated for each of the print data portions. The printdata portions can be compressed data or not compressed data. If they arecompressed as downloaded, the print data portions must be compressed atthe server 10 before sending to the printer 30. Compression schemes usedcan be lossless such as arithmetic coding, Huffman coding or other formsof entropy coding, or lossy, such as transform coding (DCT, wavelet, forexample).

Compression schemes used can be standard, such as JPEG, or can betailored to the application.

If a recoverable error occurs, the server 10 returns an error code tothe printer 30 (step 795, FIG. 9).

Detailed Embodiment

One embodiment of this invention, the printer 30 initiates a connectionto the server 10 over a TCP/IP network. The connection is initiated viaa telephone call. This requires the use of a serial line protocol suchas Serial Line IP (SLIP) or Point to Point Protocol (PPP). After theprinter makes the telephone call to the server and connects to theserver 10, the printer 30 communicates to the server 10 through an APIdescribed here. These API calls communicate with the server through asocket interface over TCP/IP. The socket is open throughout a series ofAPI calls during the time that the printer is communicating with theserver over the telephone call.

The sequence of operations is as follows:

-   -   1) Printer makes a telephone call to the server. The call may be        routed through an ISP and then over the Internet. TCP/IP        connection is established.    -   2) Printer makes a socket connection to the server at a specific        URL (Uniform Resource Locator).    -   3) Printer communicates via a series of API calls using the        underlying bi-directional socket.    -   4) Printer closes the socket    -   5) Printer disconnects the call

In this embodiment, the functions comprising the API functions arewritten in the C programming language, although it should be apparentthat other programming languages could be used.

The principal API functions are described below.

API Functions

In the API functions to be described, the first word in the functionname is the type of variable returned by the function. A void functiondoes not return a variable. The output of the function is in one of thefunction arguments, which are typically an input structure and an outputstructure.

Void openSocket

Printer sets Call returns IP Status Phone (number)

This function opens a socket connection to the server at a specific IPaddress or URL over a designated port. If phone is a non-null argument,the call will dial up the server. If the phone connection has alreadybeen made at the time of this call, phone should be set to null.

Void closeSocket (Int Hangup)

Closes the socket. If hangup is non-zero the telephone connection isterminated.

Note that for these two functions a telephone call and hangup willnormally occur,

Each of the following API calls gets a pointer to an input structure inwhich required fields are to be set before making the call and pointerto an output structure in which values are returned. (To avoid anyconfusion at the server, the structure should be completely zeroed outbefore setting the required values.) All the API calls must return evenif communication with the server is interrupted. In that case, thecomputer language code implemented with the API call must be able totimeout and set a status code of TIMEOUT_ERROR into the returning serverresponse argument status field.

Some API calls have an additional argument that is a pointer to abuffer. This is either a place to copy in bytes from the server or tocopy out bytes to the server. The type of data being transferred issummarized in the following table.

Description Direction Designation Compressed bitmap of print Server toPrinter Print data portion Bitmap of print Printer to Server Bitmap

The implementation of these functions will consist partially of code toread from an open socket or to write to the same socket. All functionsoperate as follows:

-   -   1) sizeof(input structure) bytes are written into the socket        output stream from the input argument structure. The entire        structure is written.    -   2) The functions then read sizeof(output structure) bytes from        the socket input stream and copies them into the output argument        structure. The function may need to wait until this many bytes        are available from the socket. The function must timeout if the        data does not become available after a reasonable time interval.    -   3) The output structure field magic is first examined. If it        does not equal MAGIC, then output structure field status must be        reset to TRANSMISSION_ERROR and the function should return        immediately.    -   4) For function getNextPrint, additional out.params.print.size        bytes are to be read from the socket output stream. It may be        necessary to allocate a buffer to hold this data first. (See        description of function getNextPrint.) Again, the function must        be able to timeout if the data cannot be read after a reasonable        time.    -   5) The function returns and values of the output structure are        examined. The specific values to examine depend on the function        called. However, status should always be checked.

Void Authenticate

Printer sets Server returns magic = MAGIC magic command = CONNECT statusserialNum numprints cold numDownloads modelNum firmwareNum

This function makes the initial call through the socket to the serverand authenticate the printer.

For this call, as for others, fields in the returned server responsestructure that are not specified are to be ignored. Parameter cold is tobe set to 1 if the printer was powered down and does not retain anyprevious image state information. This will cause the server to resetthe “in-progress” flags of items to be downloaded to all equal false. Inthe case where the server has a partial download buffer from theprevious connect or has not called the endOfPrint function for the lastprint, this call should be made with cold set to 0.

There are two possible states at the server:

-   -   1) The printer is already registered. In that case the number of        prints and the number of downloads needed to fetch these prints        are returned. (The number of downloads may be smaller than the        number of prints because some downloads may be specified to be        printed more than once.)    -   2) The printer has not been registered. In that case, the server        attempts to register the user. A status code is returned        indicating that the server was registered or that registration        failed. If registration was successful then the returned status        is REGISTRATION_SUCCESS. In that case, one or more welcome        prints are to be downloaded and printed so that numprints and        Downloads will both be returned with value 1.

In case 1) this call may return a status telling the printer to call afunction out of the normal sequence. For example, diagnostic commandscan be called to return data from the printer to the server or theprinter can be directed to make a separate call download new printerparameters.

Void Refresh

Printer sets Server returns in.magic = MAGIC out.magic command = refreshstatus numprints numDownloads

This call contacts the server and refreshes the still pending number ofprints to download. It is possible that new content will have enteredthe user's server folder while the printer is connected and this callthen allows the printer to keep current with the user's folder. Theserver will query the database each time this call is made.

Void getNextPrint

Printer sets Server returns magic = MAGIC magic command = GET_NEXT_PRINTstatus next.docID docID last.docID print.ID last.IDparams.print.numCopies print.offset params.print.wPixelsparams.print.hPixels params.print.size params.print.CRCparams.print.sizeReceived

This call is made to transfer all or part of the print data portion forthe next or indicated print. Arguments next.docID and next.ID can bothbe set to zero or both to integers specifying the document ID and theprint ID of the print data portion to be transferred. If both are zero,the server will transfer the next print data portion in the queue.(Note: Setting either next.ID or next.docID to zero, but not both is notallowed.)

This call supports the case where the printer may have previouslydownloaded part of a print data portion but then the connection betweenthe printer and the server was broken. If transmission is broken, thenthe call is to set sizeReceived equal to the actual number of bytes readfrom the socket and out.status is to be reset to PARTIAL_DATA_SENT. Iftransmission is successful, the call is to set sizeReceived to equalprint.size received from the server. If transmission is broken and theprinter is not powered down, the printer knows the ID of the documentand print and how much of the print data portion was transferred. Theprinter then makes this call by setting next.docID and next.ID to be theID's of the interrupted print and an offset into the print data portionwhere the printer wants to resume the transfer. After a call togetNextPrint where not all print data portion bytes were received, thenew print.offset for a subsequent call to getNextPrint should be theprevious print.offset plus the returned value of sizeReceived.

Parameters last.docID and last.ID refer to the last print that wassuccessfully transferred fully to the printer and that the printer stillhas the bitmap in memory. (Note: If the printer was powered down, thisinformation will have been lost and both of these parameters must be setto zero.) If last.docID and Last.ID parameter are non-zero, the serverdetermines if the print data portion to be downloaded represents theprint right after print with ID equal to Last.ID within the samedocument specified by last.docID.

If offset is zero, then the call will allocate a buffer of size largeenough to hold the print data and set buffer to point to this pointer.This will be the case if transmission of a picture is just beginning. Iftransmission had been interrupted and the printer wants to continue atsome point in the byte stream, print.offset should be set to that offsetand a pointer passed in pointing to the previously allocated bufferwhich will be of sufficient size to continue the download to the end ofthe print data portion.

CRC contains a CRC of the print data portion being transferred that wascomputed at the server. This CRC is of the portion of the print dataportion being transmitted during the current call to the server. Theprinter function must compute a CRC of the received print data portion(consisting of a whole or portion of print data portion from offset toend) and compare to the transmitted CRC. If they differ, status must bereset to TRANSMISSION_ERROR and the function should return immediately.

Void Ping

Printer sets Server returns magic = MAGIC Nothing command = PING

This is an optional call that is used to improve the reliability of datatransfer over slow connections. During the time that the printer isreceiving a data portion from its input socket, the server has alreadywritten the entire data portion into its output socket and is waitingfor another command from the printer. If the wait time exceeds a timeoutperiod, the server must assume that there is a problem with theprinter/server connection. In this case, the server closes the socket.To prevent this event from occurring in cases where the connection isslow, the printer can send a series of ping commands to the server. Eachping command received causes the server to reset a time variable to thecurrent time. This variable is compared periodically to see if thetimeout interval between commands from the printer has been exceeded.Hence, by sending ping commands, the printer informs the server that theconnection is still open and functioning and that the server should notclose the socket. This is shown in FIG. 9 for printer actions and FIG.12 for server actions.

Void endOfPrint

Printer sets Server returns magic = MAGIC magic command = END_OF_PRINTstatus params.endPrint.status params.endPrint.docID params.endPrint.ID

This call is to be made after each print comes out of the printer. Ifthe same print is directed to be printed multiple times, then this callis to be made multiple times, once for each physical print made. Theserver will update the database each time this call is made. The call tothe server is timed to coincide with the actual physical printing sothat the user cannot break the connection to the server after receivingthe print but before endOfPrint is called and, henceforth, have the samecontent printed again.

Use of the API Functions

Printer Behavior

An embodiment of a sequence of API calls to be made by the printer andprinter behavior, as a function of the values returned by making thesecalls, is shown in the following series of Figures.

For means of illustration, the following printer variables will bedefined:

Variable Description lastDocID The index of the last document to besuccessfully downloaded to the printer lastID The index of the lastprint of the last document to be successfully downloaded to the printernextDocID The index of the next document that the printer is asking theserver to download or zero if the printer is just asking for the nextdocument in the server queue nextID The index of the next print of thenext document or zero offset Current offset into a download buffer CRCThe CRC of an entire print data portion, when sending an entire printdata portion, as computed as the server and returned by a call togetNextPrint when in.params.pring.offset is set to zero (or the CRC of apartial print data portion, when sending a partial, print data portion).EndPrintFailure A flag to indicate that the last call to endOfPrintreturned a failed status. Cold A flag used to set in.connect.cold whencalling authenticate Status The status returned by any call through theAPI Prints The number of hard-copy prints, as communicated from theserver to the printer Dowloads The number of complete data segmentspending to be downloaded from the server to the printer Copies Thenumber of copies to be made of a print

These variables are used to hold state during the time the printer ispowered up. When the printer is powered down variables must be reset asfollows:

-   -   LastDocID=0    -   LastID=0    -   nextDocID=0    -   nextlD=0    -   offset=0    -   CRC=0    -   endPrintFailure=false    -   cold=1

The variables are to maintain their current values when the printer isboth connected and disconnected from the server, as long as the printeris not powered down.

The diagram showing the overall flow of the printer is shown in FIG. 10.

FIG. 10 does not show all details of the printer/server communicationscontrol flow. Various sub-elements of control can be understood byreference to FIGS. 3, 4 and FIG. 11. These sub-elements refer to thecorresponding procedure blocks in FIG. 10. The procedure blocks forrefresh and terminate call the refresh and endOfSession functions. FIG.11 shows printer logic during the printing of one or more copies of aprint data portion.

Server Behavior

To complete the description of the printer/server interface, anembodiment of the behavior of the server when responding to API commandssent by the printer has to be described. FIG. 12 shows an embodiment ofthe server main control loop. This loop is replicated for each printerthat connects to the server in a separate thread of control. FIG. 12 isbest understood by reference to FIGS. 8 and 9.

Structures

In one embodiment, the first two structures are used to send/receivecommands and parameters for many of the interactions between the printerand server through the socket connection. These structures are definedso that they will be a fixed, known length for all commands. This willallow the printer and server to read/write the structures as a singleblock of bytes of known size. It is assumed that sizeof(int) is 4 bytesintegers have been used throughout. This is important since, in thisembodiment, the server is implemented in the Java programming languageand the Java code needs to read and write these data blocks correctly.Note that both structures begin with a fixed magic number that is knownto both the printer and the server.

The following structure is used by the printer when sending commands tothe server.

struct prnCmd { int magic; // Prefix for transfer check. Must be0x4C535054 (“LSPT”) int command; // All commands with parameters havetheir own struct //within union params so that prnCmd is always the samesize union { struct { int serialNum; // of printer int cold; //Flagunsigned char modelNum[8]; //0-term C String } connect; struct { struct{ int docID; // of doc of requested print int ID; // of requested print} next; struct { int docID; // of last doc int ID; // of last print }last; int offset; // Requested offset into capsule } print; struct { intstatus; //Printing status int docID; // of doc of print printed int ID;// of print printed } endPrint; } params; }

The following structure is used by the server to return status to theprinter.

struct svrRsp { int magic; // Prefix for xfr check. Must be 0x4C535054(“LSPT”) int status; // All commands with parameters have their ownstruct // within union params so that svrRsp is always the same sizeunion { struct { int numPrints; // Num prints pending int numDownloads;// Num of downloads required to get prints } connect; // Used by bothconnect and refresh command struct { int docID; // Document ID of theprint int ID; // ID of the print int numCopies; // Number of copies ofthe print int wPixels; // Pixels across width of the paper int hPixels;// Pixels along length of the paper int size; // Size of portion ofcapsule sent int CRC; // A crc of portion of capsule sent intsizeReceived; // Actual size of capsule received } print; unsigned charphoneNumber[12]; // Phone number digits } params; };Security Enhancements

The following are two methods for enhancing the security and reliabilityof communications between the printer and the server.

1) Immediately after the socket connection is made, the server will senda challenge phrase to the printer. This can consist of either a singleinteger value or a buffer of byte data of fixed size. The data will berandomly generated on the server. The printer will run an algorithm overthe data to produce a hash value that will be returned to the server.The server will run the same algorithm over the original data sent andcompare the results. If they match, the connection is allowed toproceed. If they do not, the server will immediately close the socket. Asimple hash algorithm that takes advantage of code already present onthe server is to simply run the CRC algorithm over the challenge dataand return the CRC value to the server

2) Right before endOfSession is called a new API call will be made. Inthis call, the printer will send some dynamic data to the server. Thiscould be a randomly generated number or some data describing theoperation of the server during the current session. The server receivesthis data and stores it into the database. If successful, a code ofSUCCESS is returned to the printer. The printer then stores the samedata in persistent memory. When the printer next connects to the server,the printer sends the same data. The server checks against what wassaved in the database. If they agree, the connection is allowed tocontinue. If they disagree, then the server will send a second challengephrase that is hashed by the printer using a different algorithm. Theresult is sent back to the server where it is checked by running thecorresponding algorithm similar to 1) above. Since this situation willrarely occur, it makes it much less likely that a hostile process“listening” to the Internet data transfer would be able to gather enoughdata to reverse engineer the second hashing algorithm.

In addition to these application-level security measures, there aremeasures that are provided by the software products that the printer andserver are implemented with. The server can prevent denial of serviceattacks by setting a parameter that limits the size of a data blockreceived at the server to a known, maximum size. Secondly, the printerwill initially connect with a user name and password that is implementedbelow the application level software described herein. Third, serialline protocols used over modems such as PPP implement a ChallengeHandshake protocol (CHAP), which is used to verify the identity of aclient using a 3-way handshake scheme.

Printer and Server Implementations

The methods of this invention can be implemented by a printer system anda server system comprising means for implementing the functionsdescribed above. At least one processor and supporting memory at theprinter and, similarly, at least one processor and supporting memory atthe server can be used to implement the methods of this invention.Processors can be dedicated processors, or general purpose processorsand supporting memory could be any computer accessible memory.

One additional advantage of the present invention is the reduction ofloading of the memory at the server. For servers operating under TCP,when a connection closes, in order to block further connections,TIME_WAIT states are kept in the server memory (T. Faber, J. Touch, W.Yue, “The TIME_WAIT state in TCP and Its Effect on Busy Servers”,http://www.isi.edu/touch/pubs/infocomm99/infocomm99-web/). The presentmethod reduces the memory loading by:

-   -   a) sending an endOfSession message to the server at the end of        the printing session causing the server to close the socket at        the server without responding to the printer, and,    -   b) closing the socket at the printer after sending the        endOfSession message. This action eliminates the need for a        server to maintain a TIME_WAIT state for each recently        disconnected printer. This reduces server memory requirements        and increases processing speed.

The complete two way communication between the printer and the server,which is described above, enables the remote operation of the printer(without a companion computer). The protocol disclosed above enablescomplete two-way communication between output devices and servers andensures reliable communication by allowing the transmission ofinformation to restart at the point of interruption, if interrupted.

In general, the techniques described above may be implemented, forexample, in hardware, software, firmware, or any combination thereof.The techniques described above may be implemented in one or morecomputer programs executing on a programmable computer including aprocessor, a storage medium readable by the processor (including, forexample, volatile and non-volatile memory and/or storage elements), atleast one input device, and at least one output device. Program code maybe applied to data entered using the input device to perform thefunctions described and to generate output information. The outputinformation may be applied to one or more output devices.

Although the above description refers to a specific embodiment, itshould be apparent that other embodiments are within the scope of theinvention. For example, rather than sending a notification to the serverafter every print, such notification could be sent after a number ofprints. Other similar modifications are within the scope of the art.

Each computer program within the scope of the claims below may beimplemented in any programming language, such as assembly language,machine language, a high-level procedural programming language, or anobject-oriented programming language. The programming language may be acompiled or interpreted programming language.

Each computer program may be implemented in a computer program producttangibly embodied in a computer-accessible storage device for executionby a computer processor. Method steps of the invention may be performedby a computer processor executing a program tangibly embodied on acomputer-readable medium to perform functions of the invention byoperating on input and generating output.

Common forms of computer-readable media include, for example, a floppydisk, a flexible disk, hard disk, magnetic tape, or any other magneticmedium, a CDROM, any other optical medium, punched cards, paper tape,any other physical medium with patterns of holes, a RAM, a PROM, andEPROM, a FLASH-EPROM, any other memory chip or cartridge, a carrierwave, or any other medium from which a computer can read and/or write.

Elements and components described herein may be further divided intoadditional components or joined together to form fewer components forperforming the same functions.

Although the invention has been described with respect to variousembodiments, it should be realized this invention is also capable of awide variety of further and other embodiments within the spirit andscope of the appended claims.

What is claimed:
 1. A method comprising: receiving, by a computingdevice from a remote printer, data identifying one or morecharacteristics of the remote printer, wherein the computing devicecomprises at least one processor and memory and is communicativelycoupled to the remote printer via a network; verifying, by the computingdevice, that the remote printer has been registered with the computingdevice; and sending, from the computing device to the remote printer, anindication of a number of data items to be printed and an indication ofa number of print data items to be downloaded, wherein the remoteprinter is configured to download the print data items.
 2. The method ofclaim 1, wherein verifying that the remote printer has been registeredwith the computing device comprises comparing the one or morecharacteristics of the remote printer with data in a database.
 3. Themethod of claim 1, further comprising determining to terminate acommunication connection with the remote printer based at least in parton a comparison of a number of items printed by the remote printer andthe number of data items to be printed.
 4. The method of claim 1,further comprising: sending, from the computing device to the remoteprinter, an indication of an updated number of data items to be printed;and determining to terminate a communication connection with the remoteprinter based at least in part on a comparison of a number of itemsprinted by the remote printer and the updated number of data items to beprinted.
 5. The method of claim 1, further comprising: sending, from thecomputing device to the remote printer, an indication of an updatednumber of data items to be printed; and receiving, by the computingdevice from the remote printer, a request for the updated number of dataitems to be printed.
 6. The method of claim 1, further comprising:sending, from the computing device to the remote printer, an indicationof an updated number of data items to be printed; and sending, from thecomputing device to the remote printer, an indication of an updatednumber of print data items to be downloaded in response to sending theindication of the updated number of data items to be printed.
 7. Themethod of claim 1, further comprising establishing, by the computingdevice, a communication connection with the remote printer in responseto verifying that the remote printer has been registered with thecomputing device.
 8. The method of claim 7, wherein establishing thecommunication connection comprises establishing a connection endpoint atthe computing device and receiving a communication from a connectionendpoint at the remote printer.
 9. A computer readable storage devicehaving computer-executable instructions embodied thereon, theinstructions comprising: instructions to receive, by a computing devicefrom a remote printer, data identifying one or more characteristics ofthe remote printer; instructions to verify, by the computing device,that the remote printer has been registered with the computing device;and instructions to send, from the computing device to the remoteprinter, an indication of a number of data items to be printed and anindication of a number of print data items to be downloaded, wherein theremote printer is configured to download the print data items.
 10. Thecomputer readable storage device of claim 9, wherein the instructions toverify that the remote printer has been registered with the computingdevice further comprise instructions to compare the one or morecharacteristics of the remote printer with data in a database.
 11. Thecomputer readable storage device of claim 9, the instructions furthercomprising instructions to determine to terminate a communicationconnection with the remote printer based at least in part on acomparison of a number of items printed by the remote printer and thenumber of data items to be printed.
 12. The computer readable storagedevice of claim 9, the instructions further comprising: instructions tosend, from the computing device to the remote printer, an indication ofan updated number of data items to be printed; and instructions todetermine to terminate a communication connection with the remoteprinter based at least in part on a comparison of a number of itemsprinted by the remote printer and the updated number of data items to beprinted.
 13. The computer readable storage device of claim 9, theinstructions further comprising: instructions to send, from thecomputing device to the remote printer, an indication of an updatednumber of data items to be printed; and instructions to receive, by thecomputing device from the remote printer, a request for the updatednumber of data items to be printed.
 14. The computer readable storagedevice of claim 9, the instructions further comprising: instructions tosend, from the computing device to the remote printer, an indication ofan updated number of data items to be printed; and instructions to send,from the computing device to the remote printer, an indication of anupdated number of print data items to be downloaded in response tosending the indication of the updated number of data items to beprinted.
 15. The computer readable storage device of claim 9, theinstructions further comprising instructions to establish, by thecomputing device, a communication connection with the remote printer inresponse to verifying that the remote printer has been registered withthe computing device.
 16. The computer readable storage device of claim15, wherein the instructions to establish the communication connectioncomprise instructions to establish a connection endpoint at thecomputing device and instructions to receive a communication from aconnection endpoint at the remote printer.
 17. A computing device formanaging a remote printer, the computing device comprising: at least oneprocessor; and at least one memory in communication with the at leastone processor, the at least one memory having instructions embodiedthereon that, in response to execution by the at least one processor,cause the computing device to: receive, from a remote printer, dataidentifying one or more characteristics of the remote printer, verifythat the remote printer has been registered with the computing device,and send, to the remote printer, an indication of a number of data itemsto be printed and an indication of a number of print data items to bedownloaded, wherein the remote printer is configured to download theprint data items.
 18. The computing device of claim 17, whereinverifying that the remote printer has been registered with the computingdevice comprises comparing the one or more characteristics of the remoteprinter with data in a database.
 19. The computing device of claim 17,the instructions further comprising instructions that, in response toexecution by the at least one processor, cause the computing device todetermine to terminate a communication connection with the remoteprinter based at least in part on a comparison of a number of itemsprinted by the remote printer and the number of data items to beprinted.
 20. The computing device of claim 17, the instructions furthercomprising instructions that, in response to execution by the at leastone processor, cause the computing device to determine to terminate acommunication connection with the remote printer based at least in parton a comparison of a number of items printed by the remote printer andan updated number of data items to be printed.